﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Prisa.Entities;
using Prisa.DataAccess;
using Microsoft.Practices.Unity;

namespace Prisa.BussinesLogic
{
    public class HistorialVentaBL : IHistorialVentaBL
    {
        [Dependency]
        public IHistorialVentaDAO HistorialVentaDAO { get; set; }

        [Dependency]
        public ICategoriaDAO categoriaDAO { get; set; }

        [Dependency]
        public IProductoDAO productoDAO { get; set; }

        public List<HISTORIAL_VENTAS> GetAllFromHistorialVentas()
        {
            return HistorialVentaDAO.GetAllFromHistorialVentas();
        }

        public List<HISTORIAL_VENTAS> GetFromHistorialVentasbyFechasAndProductoAndContado(DateTime? fec1, DateTime? fec2, string producto, bool contado)
        {
            return HistorialVentaDAO.GetFromHistorialVentasbyFechasAndProductoAndContado(fec1, fec2, producto,contado);
        }

        public List<HISTORIAL_VENTAS> GetFromHistorialVentasbyFechasAndProductoAndCredito(DateTime? fec1, DateTime? fec2, string producto, bool credito)
        {
            return HistorialVentaDAO.GetFromHistorialVentasbyFechasAndProductoAndCredito(fec1, fec2, producto, credito);
        }

        public List<HISTORIAL_VENTAS> GetFromHistorialVentasbyFechasAndProductoAndMenudeo(DateTime? fec1, DateTime? fec2, string producto, bool menudeo)
        {
            return HistorialVentaDAO.GetFromHistorialVentasbyFechasAndProductoAndMenudeo(fec1, fec2, producto, menudeo);
        }

        public HISTORIAL_VENTAS GetFromHistorialVentasById(int id)
        {
            return HistorialVentaDAO.GetFromHistorialVentasById(id);
        }

        public void AddHistorialVentas(HISTORIAL_VENTAS historialVenta)
        {
            //if (historialVenta.Total <= 5)
            //{
                var msg = "";
                var ok = historialVenta.Validate(out msg);
                if (ok)
                {
                    HistorialVentaDAO.AddHistorialVentas(historialVenta);

                    if (historialVenta.Menudeo == true)
                    {
                        var producto = productoDAO.GetFromProductoById(historialVenta.ProductoId);
                        var categoria = categoriaDAO.GetFromCategoriaById(producto.CategoriaId);
                        var actproducto = producto;
                        actproducto.CATEGORIA = categoria;
                        actproducto.Stock = producto.Stock - historialVenta.Cantidad;
                        productoDAO.UpdateProducto(actproducto);
                    }
                }
                else
                {
                    throw new Exception(msg);
                }
            //}
            //else
            //{
            //    var error = string.Format("Para un monto mayor a S/5.00 es necesario emitir una boleta");
            //    throw new Exception(error);
            //}
        }

        public void UpdateHistorialVenta(int idProducto, DateTime? fecha, decimal precio, int cantidadAct, int nuevaCant)
        {
            HistorialVentaDAO.UpdateHistorialVenta(idProducto, fecha, precio, cantidadAct, nuevaCant);
        }

        public void UpdateHistorialCredito(int idProducto, DateTime? fecha, Decimal precio, int cantidadAct, int nuevaCant)
        {
            HistorialVentaDAO.UpdateHistorialCredito(idProducto, fecha, precio, cantidadAct  , nuevaCant);
        }
        
        public void RemoveHistorialVentas(int idProducto, DateTime? fecha, Decimal precio, int cantidad)
        {
            HistorialVentaDAO.RemoveHistorialVentas(idProducto, fecha, precio, cantidad);
        }      

        public void RemoveHistorialCredito(int idProducto, DateTime? fecha, decimal precio, int cantidad)
        {
            HistorialVentaDAO.RemoveHistorialCredito(idProducto, fecha, precio, cantidad);
        }


        public void CierreDeCaja(DateTime? FechaHistorial)
        {
            HistorialVentaDAO.CierreDeCaja(FechaHistorial);
        }


        public void UpdateHistorialMenudeo(HISTORIAL_VENTAS historialMenudeo)
        {
            var msg = "";
            var ok = historialMenudeo.Validate(out msg);
            if (ok)
            {

                HistorialVentaDAO.UpdateHistorialMenudeo(historialMenudeo);

                if (historialMenudeo.Cancelada == true)
                {
                    var producto = productoDAO.GetFromProductoById(historialMenudeo.ProductoId);
                    var categoria = categoriaDAO.GetFromCategoriaById(producto.CategoriaId);
                    var actproducto = producto;
                    actproducto.CATEGORIA = categoria;
                    actproducto.Stock = producto.Stock + historialMenudeo.Cantidad;
                    productoDAO.UpdateProducto(actproducto);
                }

            }
            else
            {
                throw new Exception(msg);
            }
        }



        


    }
}
